//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
////////////////////////////////////////
// 在此添加用户文件头说明信息  
// 文件名称: port.c
// 文件描述: 
// 文件版本: V1.0
// 修改记录:
//   1. (2025-07-21) 创建文件
////////////////////////////////////////
//<<AICUBE_USER_HEADER_REMARK_END>>


#include "config.h"


//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用户头文件包含  
//<<AICUBE_USER_INCLUDE_END>>


//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明  
//<<AICUBE_USER_GLOBAL_DEFINE_END>>



////////////////////////////////////////
// P0口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT0_Init(void)
{
    SetP0nQuasiMode(PIN_7 | PIN_6 | PIN_5 | PIN_4 | PIN_2 | PIN_1); //设置P0.7,P0.6,P0.5,P0.4,P0.2,P0.1为准双向口模式
    SetP0nHighZInputMode(PIN_3 | PIN_0); //设置P0.3,P0.0为高阻输入模式

    DisableP0nPullUp(PIN_ALL);          //关闭P0内部上拉电阻
    DisableP0nSchmitt(PIN_ALL);         //使能P0施密特触发
    SetP0nSlewRateNormal(PIN_ALL);      //设置P0一般翻转速度
    SetP0nDrivingNormal(PIN_ALL);       //设置P0一般驱动能力
    SetP0nDigitalInput(PIN_ALL);        //使能P0数字信号输入功能

    //<<AICUBE_USER_PORT0_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_PORT0_INITIAL_END>>
}

////////////////////////////////////////
// P1口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT1_Init(void)
{
    SetP1nQuasiMode(PIN_5 | PIN_4 | PIN_3 | PIN_2 | PIN_1 | PIN_0); //设置P1.5,P1.4,P1.3,P1.2,P1.1,P1.0为准双向口模式
    SetP1nHighZInputMode(PIN_7 | PIN_6); //设置P1.7,P1.6为高阻输入模式

    DisableP1nPullUp(PIN_ALL);          //关闭P1内部上拉电阻
    DisableP1nSchmitt(PIN_ALL);         //使能P1施密特触发
    SetP1nSlewRateNormal(PIN_ALL);      //设置P1一般翻转速度
    SetP1nDrivingNormal(PIN_ALL);       //设置P1一般驱动能力
    SetP1nDigitalInput(PIN_ALL);        //使能P1数字信号输入功能

    //<<AICUBE_USER_PORT1_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_PORT1_INITIAL_END>>
}

////////////////////////////////////////
// P2口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT2_Init(void)
{
    SetP2nHighZInputMode(PIN_7 | PIN_6 | PIN_5 | PIN_4); //设置P2.7,P2.6,P2.5,P2.4为高阻输入模式
    SetP2nOpenDrainMode(PIN_3 | PIN_2 | PIN_1 | PIN_0); //设置P2.3,P2.2,P2.1,P2.0为开漏模式

    DisableP2nPullUp(PIN_ALL);          //关闭P2内部上拉电阻
    DisableP2nSchmitt(PIN_ALL);         //使能P2施密特触发
    SetP2nSlewRateNormal(PIN_ALL);      //设置P2一般翻转速度
    SetP2nDrivingNormal(PIN_ALL);       //设置P2一般驱动能力
    SetP2nDigitalInput(PIN_ALL);        //使能P2数字信号输入功能

    SetP2nLowLevelInt(PIN_7 | PIN_6 | PIN_5 | PIN_4); //设置P2.7,P2.6,P2.5,P2.4为低电平中断

    EnableP2nInt(PIN_7 | PIN_6 | PIN_5 | PIN_4); //使能P2.7,P2.6,P2.5,P2.4口中断

    SetP2IntPriority(0);                //设置中断为最低优先级

    //<<AICUBE_USER_PORT2_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_PORT2_INITIAL_END>>
}

////////////////////////////////////////
// P3口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT3_Init(void)
{
    SetP3nQuasiMode(PIN_5 | PIN_4 | PIN_3); //设置P3.5,P3.4,P3.3为准双向口模式
    SetP3nHighZInputMode(PIN_7 | PIN_6 | PIN_2 | PIN_1 | PIN_0); //设置P3.7,P3.6,P3.2,P3.1,P3.0为高阻输入模式

    DisableP3nPullUp(PIN_ALL);          //关闭P3内部上拉电阻
    DisableP3nSchmitt(PIN_ALL);         //使能P3施密特触发
    SetP3nSlewRateNormal(PIN_ALL);      //设置P3一般翻转速度
    SetP3nDrivingNormal(PIN_ALL);       //设置P3一般驱动能力
    SetP3nDigitalInput(PIN_ALL);        //使能P3数字信号输入功能

    SetP3nFallingInt(PIN_7 | PIN_6);    //设置P3.7,P3.6为下降沿中断

    EnableP3nInt(PIN_7 | PIN_6);        //使能P3.7,P3.6口中断

    SetP3IntPriority(0);                //设置中断为最低优先级

    //<<AICUBE_USER_PORT3_INITIAL_BEGIN>>
    // 在此添加用户初始化代码  
    //<<AICUBE_USER_PORT3_INITIAL_END>>
}


////////////////////////////////////////
// 端口2中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT2_ISR(void) interrupt P2INT_VECTOR
{
    //<<AICUBE_USER_PORT2_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码  
    uint8_t intf;

    intf = CheckP2nFlag(PIN_ALL);       //读取中断请求标志
    ClearP2nFlag(PIN_ALL);              //清除中断请求标志
    //<<AICUBE_USER_PORT2_ISR_CODE1_END>>
}

////////////////////////////////////////
// 端口3中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT3_ISR(void) interrupt P3INT_VECTOR
{
    //<<AICUBE_USER_PORT3_ISR_CODE1_BEGIN>>
    // 在此添加中断函数用户代码  
    uint8_t intf;

    intf = CheckP3nFlag(PIN_ALL);       //读取中断请求标志
    ClearP3nFlag(PIN_ALL);              //清除中断请求标志
    //<<AICUBE_USER_PORT3_ISR_CODE1_END>>
}


//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用户函数实现代码  
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>


